package com.example.a06;

import org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor;
import org.springframework.context.annotation.CommonAnnotationBeanPostProcessor;
import org.springframework.context.annotation.ConfigurationClassPostProcessor;
import org.springframework.context.support.GenericApplicationContext;

public class Application06 {
    public static void main(String[] args) {
        /*
            1. Aware接口用于注入一些与容器相关信息，例如
                a: BeanNameAware 注入 bean 的名字
                b: BeanFactoryAware 注入 BeanFactory 容器
                c: ApplicationContextAware 注入ApplicationContext容器
                d: EmbeddedValueResolverAware ${}
         */
        GenericApplicationContext context = new GenericApplicationContext();
//        context.registerBean(MyBean.class);
//        context.registerBean("myBean",MyBean.class);
//        context.registerBean("myConfig1", MyConfig1.class);
        context.registerBean("myConfig2", MyConfig2.class);
        context.registerBean(AutowiredAnnotationBeanPostProcessor.class);
        context.registerBean(CommonAnnotationBeanPostProcessor.class);
        context.registerBean(ConfigurationClassPostProcessor.class);

        context.refresh();

        context.close();

        /*
            2. @Autowired可以实现，为什么还需要使用Aware接口
                a: @Autowired 的解析需要用到bean后处理器，属于扩展功能
                b: Aware接口属于内置功能，不加任何扩展Spring就能识别
                tip: 某些情况下扩展功能会失效，而内置功能不会
         */
    }
}
